#ifndef CLIENT_H_
#define CLIENT_H_

#include "../lib/MessageQueue.h"

#include "../shared/DBRegister.h"
#include "../shared/Request.h"

#include <string>

class Client {

private:

	MessageQueue<Message> channel;	/* canal de comunicacion con el servidor */

	long 	my_mtype;	/* mtype con el que espero recibir la respuesta del servidor */

	bool 	is_channel_open;

	/*
	 * Envia una request al servidor y se obtiene una respuesta
	 * update_myreg = true si queremos guardarnos el registro que nos envia el servidor (caso de un get)
	 *
	 * */
	int requestServer(int request_id, DBRegister *reg, bool update_myreg = false);

	void openChannel();

	bool isServerOnline();

public:

	Client();

	virtual ~Client();


	/*
	 * obtiene un registro desde la base de datos remota.
	 * name: nombre del registro a obtener
	 * reg: puntero a la estructura donde se guardarán los datos
	 * */
	int getRegister(std::string name, DBRegister *reg);

	/*
	 *  Inserta el registro reg en la base de datos
	 */
	int insertRegister(DBRegister *reg);

	/*
	 *  Remueve el registro reg en la base de datos
	 */
	int removeRegister(DBRegister *reg);

	/*
	 *  Actualiza el registro reg en la base de datos que tenga el mismo nombre
	 */
	int updateRegister(DBRegister *reg);



};

#endif /* CLIENT_H_ */
